package com.ruoyi.system.mapper;

import java.util.List;

import com.ruoyi.common.core.domain.entity.SysRole;

/**
 * 角色表 数据层
 *
 * @author ruoyi
 */
public interface SysRoleMapper {
    /**
     * 根据条件分页查询角色数据
     *
     * @param role 角色信息，用于构建查询条件
     * @return 角色数据集合信息
     */
    public List<SysRole> selectRoleList(SysRole role);

    /**
     * 根据用户ID查询该用户所拥有的角色权限信息
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<SysRole> selectRolePermissionByUserId(Long userId);

    /**
     * 查询系统中所有可用的角色信息
     *
     * @return 角色列表
     */
    public List<SysRole> selectRoleAll();

    /**
     * 根据用户ID获取角色选择框列表，通常用于前端回显已选中的角色
     *
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    public List<Long> selectRoleListByUserId(Long userId);

    /**
     * 通过角色ID精确查询单个角色的信息
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    public SysRole selectRoleById(Long roleId);

    /**
     * 根据用户名查询其对应的所有角色信息
     *
     * @param userName 用户名
     * @return 角色列表
     */
    public List<SysRole> selectRolesByUserName(String userName);

    /**
     * 校验角色名称在系统中是否唯一
     *
     * @param roleName 待校验的角色名称
     * @return 若存在相同名称则返回对应角色信息，否则返回null
     */
    public SysRole checkRoleNameUnique(String roleName);

    /**
     * 校验角色权限标识（如admin）在系统中是否唯一
     *
     * @param roleKey 角色权限字符串
     * @return 若存在相同权限标识则返回对应角色信息，否则返回null
     */
    public SysRole checkRoleKeyUnique(String roleKey);

    /**
     * 更新指定角色的基本信息
     *
     * @param role 包含更新后角色信息的对象
     * @return 受影响的记录数，一般为1表示成功更新
     */
    public int updateRole(SysRole role);

    /**
     * 插入一个新的角色到数据库中
     *
     * @param role 待插入的角色信息
     * @return 受影响的记录数，一般为1表示插入成功
     */
    public int insertRole(SysRole role);

    /**
     * 通过角色ID逻辑或物理删除一个角色
     *
     * @param roleId 要删除的角色ID
     * @return 受影响的记录数，一般为1表示删除成功
     */
    public int deleteRoleById(Long roleId);

    /**
     * 批量删除多个角色信息
     *
     * @param roleIds 需要删除的角色ID数组
     * @return 成功删除的记录数量
     */
    public int deleteRoleByIds(Long[] roleIds);
}
